Zurück in DatenbankentwicklungWeiter in DatenbankentwicklungKomplexe QBE-Abfragen aus TESTS ?

Das Thema QBE-Abfragen führt an einer Eintabellen- und einer Mehrtabellen-Abfrage in QBE ein. Dieses Hilfethema veranschaulicht die beiden Abfragetypen an einem komplexen Beispiel aus Access Quiz.mdb. Es zeigt, dass eine einfach aussehende Abfrage aus einer Reihe verschachtelter Hilfsabfragen bestehen kann. Eine solche Abfrage kann sich weit vom Idealbild einer deklarativen Abfrage entfernen.

Problemstellung

Das folgende Bild zeigt einen Ausschnitt aus dem Aufgabenmenü eines Access Quiz:


Die drei ersten Spalten orientieren über den Aufgabenstatus:

Mit einem Klick auf die unterste Zeile des obigen Aufgabenmenüs gelangt der Quizteilnehmer zum Beispiel zur Zuordnungsaufgabe "Neuronale Netze und Expertensysteme". Datenherkunft dieser Zeile ist die letzte Zeile einer QBE-Ergebnistabelle, die den Aufgabenstatus jeder Zuordnungsaufgaben enthält:

Nachdem der Testteilnehmer auf die Zeile "Neuronale Netze und Expertensysteme" geklickt hat, gelangt er in das folgende Eingabeformular:

Ziel der nächsten zwei Abschnitte ist die Entwicklung einer QBE-Abfrage, welche die obige Tabelle ergibt (Die Entwicklung einer analogen Abfrage für Mehrfachwahlaufgaben finden Sie unter Aufgabenstatus von Mehrfachwahlaufgaben).


Hilfsabfragen

Dieser Abschnitt entwickelt die Hilfsabfragen, welche in die Hauptabfrage des nächsten Abschnitts eingehen:

  1. Die Query QryZahlZOAlternativenMuster ergibt die Zahl aller Zuordnungspaare in den Musterlösungen (erste Spalte des Aufgabenmenüs):

  1. QryZahlZOAlternativenBearbeitet ermittelt die Zahl der bisher vom Teilnehmer eingetragenen Zuordnungspaare aller Aufgaben (zweite Spalte des Aufgabenmenüs). Die Menge der bisher eingetragenen Zuordnungspaare muss keine Teilmenge der Paare von QryZahlZOAlternativenMuster sein.

  1. QryZahlZOMusterUndBearbeitet ermittelt die Schnittmenge der korrekten und der bisher eingetragenen Zuordnungspaare:

  1. QryZahlZOAlternativenRichtigGelöst ermittelt schliesslich die Zahl der bisher vom Teilnehmer korrekt eingetragenen Zuordnungspaare (dritte Spalte des Aufgabenmenüs):


Hauptabfrage

QryZahlZOMusterUndBearbeitetUndRichtigGelöst ermittelt schliesslich die Schnittmenge der 2. und 4. Hilfsabfrage (QryZahlZOMusterUndBearbeitet und QryZahlZOAlternativenRichtigGelöst):

Aus Platzgründen erscheint in der entsprechenden Entwurfsansicht nur die dritte Spalte. Sie berücksichtigt den Fall, dass noch kein Eintrag vorliegt, in einem WENN-Ausdruck:

Bearbeitet ist ein arithmetischer Ausdruck, wie er auch in der Zelle eines Tabellenblatts vorkommen kann. Ausdrücke treten vor allem in Gültigkeitsregeln auf: Der Ausdruck >="A" Und <="Z" stellt zum Beispiel sicher, dass die Bearbeiterin einer Zuordnungsaufgabe nur Buchstabenpräfixe zwischen A und Z eingibt. Ein Ausdruck kann aus Konstanten, Variablen, Operatoren und Funktionsaufrufen bestehen.

Für ein Beispiel eines Gültigkeitsausdrucks markieren Sie das Feld TxfBuchstabenpräfix des Unterformulars Subfrm Buchstabenalternativen, drücken »Alt/Eingabetaste und lesen den Wert der Eigenschaft Gültigkeitsregel. Mehr über Ausdrücke erfahren Sie im Access-Hilfethema Ausdruck.

Der Ausdruck Bearbeitet des obigen Bildschirmausschnitts besteht aus zwei geschachtelten Aufrufen der Funktionen Summe und Wenn:

  1. Summe(<Ausdruck>) gibt die Summe der Werte zurück, die in einem oder mehreren Feldern einer QBE-Abfrage enthalten sind.

  2. Wenn(<Bedingung>; <Dann-Ausdruck>; <Sonst-Ausdruck>) berechnet den Dann-Ausdruck nur bei zutreffender Bedingung, sonst wertet die Funktion den Ausdruck nach dem Semikolon aus. Diese Funktion entspricht der Entscheidungsanweisung von VBA.

Der Ausdruck Summe(Wenn(SCORESMC!Benutzerlösung=-1; QryZahlMCAlternativenMuster![Anzahl von Fragenschlüssel]; 0)) bedeutet deshalb:

Falls der laufende Wert einer Benutzerlösung der Tabelle SCORESMC -1 ist, dann aggregiere den laufenden Wert des Felds 'Anzahl von Fragenschlüssel' der Ergebnistabelle von QryZahlMCAlternativenMuster.

Der Sonst-Teil des Ausdrucks ist überflüssig. Weil ihn aber die Syntax der WENN-Funktion verlangt, steht 0.


Aufgabenstatus von Mehrfachwahlaufgaben